//
//  FolderScanner.m
//  CoversEverywhere
//
//  Created by Pablo Roulet on 15/06/09.
//  Copyright 2009 Pablo Roulet. All rights reserved.
//

#import "FolderScanner.h"

@interface FolderScanner()

- (void)recursiveFilenamesFrom:(NSString *)rootDirectory 
				  inCollection:(NSMutableArray *)filesCollection 
				 withExtension:(NSString *)anExtension;

@end

@implementation FolderScanner

- (NSArray *)searchForFilesIn:(NSArray *)rootFiles 
				withExtension:(NSString *)anExtension
{
	//Declaro un MutableArray donde voy a ir guardando todos los archivos
	NSMutableArray *allFiles = [[NSMutableArray alloc] init];
	
	
	//Recorro los archivos pasados por rootFiles en busca del tipo pedido en anExtension
	for (int i=0; i<[rootFiles count]; i++){
		[self recursiveFilenamesFrom:[rootFiles objectAtIndex:i] inCollection:allFiles withExtension:anExtension];
	}
	
	return [allFiles autorelease];
}

- (void)recursiveFilenamesFrom:(NSString *)rootDirectory 
				 inCollection:(NSMutableArray *)filesCollection 
				withExtension:(NSString *)anExtension
{
    BOOL isDir = NO;
    id subFile;
	
	//Si le paso un directorio busca archivos dentro de él	
	if ([[NSFileManager defaultManager] fileExistsAtPath:rootDirectory isDirectory:&isDir] && isDir){
		
		NSDirectoryEnumerator *dirEnum =[[NSFileManager defaultManager] enumeratorAtPath:rootDirectory];
		while (subFile = [dirEnum nextObject]){
			
			isDir = NO;
			if ([[NSFileManager defaultManager] fileExistsAtPath:subFile isDirectory:&isDir] && isDir){
				//Si encuentro un directorio hago una llamada recursiva
				[self recursiveFilenamesFrom:subFile inCollection:filesCollection withExtension:anExtension];
				
			}else if ([[[subFile pathExtension] lowercaseString] isEqualToString:anExtension]){
				//Si el archivo es del tipo pedido lo guardo en el Array
				[filesCollection addObject:[rootDirectory stringByAppendingPathComponent:subFile]];
				
			}
		}
	}else if ([[[rootDirectory pathExtension] lowercaseString] isEqualToString:anExtension]){
		
		//Si el archivo es del tipo pedido lo guardo en el Array
		[filesCollection addObject:rootDirectory];		
	}
}

@end
